package com.sacc.util;

import com.alibaba.fastjson.JSONObject;
import org.bouncycastle.util.encoders.Base64;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

/**
 * @author 滚~韬
 * @date 2022/4/4 19:18
 */
@Deprecated
@Component
public class FileUtil {

    private static JSONObject typeObj;
    @Value("${upload.path.temporary}")
    private String base_path;
    /**
     * 上传单个文件
     * @param relativePath 相对路径
     * @param file 文件
     * @param fileType 文件类型
     * @return 文件路径
     */
    public  String upload(String relativePath, MultipartFile file, String fileType) {
        relativePath = base_path + relativePath;
        File dir = new File(relativePath);
        if (!dir.exists()) {
            dir.mkdirs();
        }
        String fileName;
        if (!file.isEmpty()) {
            try {
                String name = file.getOriginalFilename();
                fileName = checkFile(name, fileType);
                //判断文件类型并返回文件名
                if (fileName != null) {
                    File realFile = new File(relativePath + fileName);
                    file.transferTo(realFile);
                } else {
                    return null;
                }
            } catch (IllegalStateException | IOException e) {
                e.printStackTrace();
                return null;
            }
            return relativePath + fileName;
        } else {
            return null;
        }
    }
    /**
     * 上传多个文件
     *
     * @param relativePath 相对路径
     * @param files        文件
     * @return 完整路径名列表
     */
    public  List<String> uploads(String relativePath, MultipartFile[] files, String fileType) {
        String basePath = base_path + relativePath;
        List<String> list = new ArrayList<>();
        for (int i = 0; i < files.length; i++) {
            if (!files[i].isEmpty()) {
                try {
                    String name = files[i].getOriginalFilename(); //获取原文件名
                    String fileName = checkFile(name, fileType); //获取新文件名
                    //判断文件类型并返回文件名
                    if (fileName != null) {
                        File realFile = new File(basePath + fileName);
                        files[i].transferTo(realFile);
                        list.add(basePath + fileName);
                    } else {
                        return null;
                    }
                } catch (IllegalStateException | IOException e) {
                    e.printStackTrace();
                }
            } else {
                return null;
            }
        }
        return list;
    }

    /**
     * 单文件删除
     * @param url 文件路径
     * @return 返回boolean 删除成功或失败
     */
    public static boolean delete(String url) {
        File file = new File(url);
        // 如果文件路径所对应的文件存在，并且是一个文件，则直接删除
        if (file.exists() && file.isFile()) {
            if (file.delete()) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

    /**
     * 判断是否为允许的上传文件类型
     *
     * @return null或文件名
     */
    public static String checkFile(String fileName, String type) {
        if (typeObj == null) {
            typeObj = new JSONObject();
            typeObj.put("image", "jpg,gif,png,ico,bmp,jpeg");
            typeObj.put("file", "txt,doc,docx,xlsx,xls,pdf,jpg,gif,png,ico,bmp,jpeg");
        }
        String suffixList = (String) typeObj.get(type);
        // 获取文件后缀
        String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);

        if (suffixList.contains(suffix.trim().toLowerCase())) {
            return UUID.randomUUID().toString().replace("-", "") + "." + suffix.trim().toLowerCase();
        }
        return null;
    }
    /**
     * 获取到文件的url路径
     * @param url
     * @return
     * @throws IOException
     */
    public static String getFile(String url) throws IOException {
        File file = new File(url);
        if (file.exists() && file.isFile()) {
            FileInputStream inputFile = new FileInputStream(file);
            byte[] buffer = new byte[(int)file.length()];
            inputFile.read(buffer);
            inputFile.close();
            return Base64.toBase64String(buffer);
        } else {
            return null;
        }
    }

}
